import axios from "axios";
import NProgress from "nprogress"
import store from "@/store";
import "nprogress/nprogress.css";

import { v4 as uuidv4 } from 'uuid';
//创建一个临时uuid
let userTempId = localStorage.getItem("templateId")
if(!userTempId){
    userTempId = uuidv4()
    localStorage.setItem("templateId",userTempId)
}

//创建一个axios
const myAxios = axios.create({
     // 请求基础路径，所有通过request发送请求，请求地址前面都会自动加上baseURL
    baseURL:"/api",
    //请求的超时时间，超过时间请求会自动中断，请求失败
    timeout:4000,
    // 公共请求头(固定写死)
    // headers:{}
})



// 配置请求拦截器
myAxios.interceptors.request.use(
    config => {
        NProgress.start()
        // console.log(config);
        config.headers.userTempId =userTempId 
        const token = store.state.login.token
        if (token){
            config.headers.token = token
        }
        return config
    },
    //请求一般没有什么错误
    error => Promise.reject(error)
)

// 配置响应拦截器
myAxios.interceptors.response.use(
    // 请求成功
    response => {
        NProgress.done()
        if(response.data.code===200){
            //如果功能也成功，走这里
            return response.data.data;
        } else if(response.data.code===205){
            // 支付中
            
            return Promise.reject(response.data.message || "未知错误")
        } else{
            //功能失败,一般是没有token或过期
            store.dispatch('login/logout')
            // store.commit('login/LOGOUT')
            // localStorage.removeItem("token")
            // localStorage.removeItem("name")
            return Promise.reject(response.data.message || "未知错误")
        }
        
    },
    //请求失败
    error => {
        NProgress.done()
        console.dir(error);

        //中断Promise链
        return Promise.reject(error.message);
    }
)
export default myAxios